package jobs;

import apidocs.Configs;
import jobs.annotations.JobInfo;
import org.feichao.xdao.XDAO;
import play.Logger;
import play.Play;
import play.db.DB;
import play.jobs.OnApplicationStart;

import java.sql.Connection;

/**
 * 启动XDAO
 * 更多配置： http://git.oschina.net/steven0lisa/xdao
 * @author zhangzc
 * @since 2017/8/4
 */
@OnApplicationStart
@JobInfo(name="XDaoBoot", desc = "XDAO启动程序")
public class XDaoBoot extends BaseJob {

    @Override
    public void executeJob() {

        XDAO.DataSource master  = new XDAO.DataSource() {
            @Override
            public Connection getConnection() {
                // 这里从Master返回一个Connection即可，建议换成你项目的连接池
                try {
                    return DB.getConnection();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            public boolean close() {
                return true;//不自动关闭连接，适合应用里面使用ThreadLocal存放Connection的项目
            }
        };

        XDAO.setDataSource(master); //默认数据源

        // 设置其他数据源
        String[] sources = Configs.getAsStringArray("xdao.datasource");

        for(final String source: sources){
            XDAO.DataSource ds  = new XDAO.DataSource() {
                @Override
                public Connection getConnection() {
                    // 这里从Master返回一个Connection即可，建议换成你项目的连接池
                    try {
                        return DB.getConnection(source);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    return null;
                }

                @Override
                public boolean close() {
                    return true;//不自动关闭连接，适合应用里面使用ThreadLocal存放Connection的项目
                }
            };
        }



        XDAO.setLog(new XDAO.Logger(){
            @Override
            public void info(String s) {
                Logger.info(s);
            }

            @Override
            public void warn(String s) {
                Logger.warn(s);
            }

            @Override
            public void error(String s) {
                Logger.error(s);
            }

            @Override
            public void error(Throwable throwable, String s) {
                Logger.error(throwable, s);
            }
        });

        XDAO.debug = Play.mode.isDev();

        logInfo("设置XDAO的debug模式：%s", XDAO.debug);

        Logger.info("XDAO is ready.");
    }
}
